package chapter07._05_Logging;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @Author: insight
 * @Description: 使用日志的技巧
 * @LastDate: 2020/11/10
 */
public class Test05_LoggingTips {
    /**
     * 1.
     * 选择日志记录器时 可以把记录器命名为包名 这样容易得到记录器 方便使用
     * 除此之外 为安全起见 可以使用static 和 final修饰
     */
    private static final Logger logger = Logger.getLogger("chapter07._05_Logging");

    /**
     * 2.
     * 前面学过 默认日志配置记录大于等于INFO级别的信息
     * 我们可以直接修改配置文件 但是比较麻烦
     * 更好的做法是在特定应用设置特定配置
     *
     * 以下这段代码确保所有记录保存到一个文件中
     */
    private void myLoggingConfig() {
        try {
            String loggingConfigClass = "java.util.logging.config.class";
            String loggingConfigFile = "java.util.logging.config.file";
            if (System.getProperty(loggingConfigClass) == null && System.getProperty(loggingConfigFile) == null) {
                Logger.getLogger("your logger name").setLevel(Level.ALL);
                Logger.getLogger("your logger name").setUseParentHandlers(false);
                final int LOG_ROTATION_CNT = 5;
                var handler = new FileHandler("path of your logging file", 0, LOG_ROTATION_CNT);
                Logger.getLogger("your logger name").addHandler(handler);
            }
        } catch (IOException e) {
            logger.log(Level.SEVERE, "Can't create log file handler", e);
        }
    }

    /**
     * 开始记录后 需要设置好信息级别 给不同人看不同信息
     *
     * 比如应该给程序用户查看的信息设置为INFO及以上级别
     * 开发者查看的信息设置为FINE或者更低
     * 打印语句时 可以换成
     * logger.fine("");
     *
     * 还可以把异常也记录下来 而不是单纯打印堆栈轨迹
     * catch (Exception e) {
     *     logger.log(Level.FINE, "exception", e);
     * }
     */

}
